home *** CD-ROM | disk | FTP | other *** search
/ IRIX 6.2 Development Libraries / SGI IRIX 6.2 Development Libraries.iso / dist / complib.idb / usr / share / catman / p_man / cat3 / complib / clabrd.z / clabrd
Text File  |  1996-03-14  |  7KB  |  199 lines

  1.  
  2.  
  3.  
  4. CCCCLLLLAAAABBBBRRRRDDDD((((3333FFFF))))                                                          CCCCLLLLAAAABBBBRRRRDDDD((((3333FFFF))))
  5.  
  6.  
  7.  
  8. NNNNAAAAMMMMEEEE
  9.      CLABRD - reduce the first NB rows and columns of a complex general m by n
  10.      matrix A to upper or lower real bidiagonal form by a unitary
  11.      transformation Q' * A * P, and returns the matrices X and Y which are
  12.      needed to apply the transformation to the unreduced part of A
  13.  
  14. SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
  15.      SUBROUTINE CLABRD( M, N, NB, A, LDA, D, E, TAUQ, TAUP, X, LDX, Y, LDY )
  16.  
  17.          INTEGER        LDA, LDX, LDY, M, N, NB
  18.  
  19.          REAL           D( * ), E( * )
  20.  
  21.          COMPLEX        A( LDA, * ), TAUP( * ), TAUQ( * ), X( LDX, * ), Y(
  22.                         LDY, * )
  23.  
  24. PPPPUUUURRRRPPPPOOOOSSSSEEEE
  25.      CLABRD reduces the first NB rows and columns of a complex general m by n
  26.      matrix A to upper or lower real bidiagonal form by a unitary
  27.      transformation Q' * A * P, and returns the matrices X and Y which are
  28.      needed to apply the transformation to the unreduced part of A.
  29.  
  30.      If m >= n, A is reduced to upper bidiagonal form; if m < n, to lower
  31.      bidiagonal form.
  32.  
  33.      This is an auxiliary routine called by CGEBRD
  34.  
  35.  
  36. AAAARRRRGGGGUUUUMMMMEEEENNNNTTTTSSSS
  37.      M       (input) INTEGER
  38.              The number of rows in the matrix A.
  39.  
  40.      N       (input) INTEGER
  41.              The number of columns in the matrix A.
  42.  
  43.      NB      (input) INTEGER
  44.              The number of leading rows and columns of A to be reduced.
  45.  
  46.      A       (input/output) COMPLEX array, dimension (LDA,N)
  47.              On entry, the m by n general matrix to be reduced.  On exit, the
  48.              first NB rows and columns of the matrix are overwritten; the rest
  49.              of the array is unchanged.  If m >= n, elements on and below the
  50.              diagonal in the first NB columns, with the array TAUQ, represent
  51.              the unitary matrix Q as a product of elementary reflectors; and
  52.              elements above the diagonal in the first NB rows, with the array
  53.              TAUP, represent the unitary matrix P as a product of elementary
  54.              reflectors.  If m < n, elements below the diagonal in the first
  55.              NB columns, with the array TAUQ, represent the unitary matrix Q
  56.              as a product of elementary reflectors, and elements on and above
  57.              the diagonal in the first NB rows, with the array TAUP, represent
  58.              the unitary matrix P as a product of elementary reflectors.  See
  59.              Further Details.  LDA     (input) INTEGER The leading dimension
  60.  
  61.  
  62.  
  63.                                                                         PPPPaaaaggggeeee 1111
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70. CCCCLLLLAAAABBBBRRRRDDDD((((3333FFFF))))                                                          CCCCLLLLAAAABBBBRRRRDDDD((((3333FFFF))))
  71.  
  72.  
  73.  
  74.              of the array A.  LDA >= max(1,M).
  75.  
  76.      D       (output) REAL array, dimension (NB)
  77.              The diagonal elements of the first NB rows and columns of the
  78.              reduced matrix.  D(i) = A(i,i).
  79.  
  80.      E       (output) REAL array, dimension (NB)
  81.              The off-diagonal elements of the first NB rows and columns of the
  82.              reduced matrix.
  83.  
  84.      TAUQ    (output) COMPLEX array dimension (NB)
  85.              The scalar factors of the elementary reflectors which represent
  86.              the unitary matrix Q. See Further Details.  TAUP    (output)
  87.              COMPLEX array, dimension (NB) The scalar factors of the
  88.              elementary reflectors which represent the unitary matrix P. See
  89.              Further Details.  X       (output) COMPLEX array, dimension
  90.              (LDX,NB) The m-by-nb matrix X required to update the unreduced
  91.              part of A.
  92.  
  93.      LDX     (input) INTEGER
  94.              The leading dimension of the array X. LDX >= max(1,M).
  95.  
  96.      Y       (output) COMPLEX array, dimension (LDY,NB)
  97.              The n-by-nb matrix Y required to update the unreduced part of A.
  98.  
  99.      LDY     (output) INTEGER
  100.              The leading dimension of the array Y. LDY >= max(1,N).
  101.  
  102. FFFFUUUURRRRTTTTHHHHEEEERRRR DDDDEEEETTTTAAAAIIIILLLLSSSS
  103.      The matrices Q and P are represented as products of elementary
  104.      reflectors:
  105.  
  106.         Q = H(1) H(2) . . . H(nb)  and  P = G(1) G(2) . . . G(nb)
  107.  
  108.      Each H(i) and G(i) has the form:
  109.  
  110.         H(i) = I - tauq * v * v'  and G(i) = I - taup * u * u'
  111.  
  112.      where tauq and taup are complex scalars, and v and u are complex vectors.
  113.  
  114.      If m >= n, v(1:i-1) = 0, v(i) = 1, and v(i:m) is stored on exit in
  115.      A(i:m,i); u(1:i) = 0, u(i+1) = 1, and u(i+1:n) is stored on exit in
  116.      A(i,i+1:n); tauq is stored in TAUQ(i) and taup in TAUP(i).
  117.  
  118.      If m < n, v(1:i) = 0, v(i+1) = 1, and v(i+1:m) is stored on exit in
  119.      A(i+2:m,i); u(1:i-1) = 0, u(i) = 1, and u(i:n) is stored on exit in
  120.      A(i,i+1:n); tauq is stored in TAUQ(i) and taup in TAUP(i).
  121.  
  122.      The elements of the vectors v and u together form the m-by-nb matrix V
  123.      and the nb-by-n matrix U' which are needed, with X and Y, to apply the
  124.      transformation to the unreduced part of the matrix, using a block update
  125.      of the form:  A := A - V*Y' - X*U'.
  126.  
  127.  
  128.  
  129.                                                                         PPPPaaaaggggeeee 2222
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136. CCCCLLLLAAAABBBBRRRRDDDD((((3333FFFF))))                                                          CCCCLLLLAAAABBBBRRRRDDDD((((3333FFFF))))
  137.  
  138.  
  139.  
  140.      The contents of A on exit are illustrated by the following examples with
  141.      nb = 2:
  142.  
  143.      m = 6 and n = 5 (m > n):          m = 5 and n = 6 (m < n):
  144.  
  145.        (  1   1   u1  u1  u1 )           (  1   u1  u1  u1  u1  u1 )
  146.        (  v1  1   1   u2  u2 )           (  1   1   u2  u2  u2  u2 )
  147.        (  v1  v2  a   a   a  )           (  v1  1   a   a   a   a  )
  148.        (  v1  v2  a   a   a  )           (  v1  v2  a   a   a   a  )
  149.        (  v1  v2  a   a   a  )           (  v1  v2  a   a   a   a  )
  150.        (  v1  v2  a   a   a  )
  151.  
  152.      where a denotes an element of the original matrix which is unchanged, vi
  153.      denotes an element of the vector defining H(i), and ui an element of the
  154.      vector defining G(i).
  155.  
  156.  
  157.  
  158.  
  159.  
  160.  
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170.  
  171.  
  172.  
  173.  
  174.  
  175.  
  176.  
  177.  
  178.  
  179.  
  180.  
  181.  
  182.  
  183.  
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  
  192.  
  193.  
  194.  
  195.                                                                         PPPPaaaaggggeeee 3333
  196.  
  197.  
  198.  
  199.